﻿
 ///请先引用icheck.js
(function ($) {
    //全选
    $.fn.icheckAll= function (options) {
    
        var defaults = {
            checkObj: ".checkPlan",//表格下面的选择控件对象 选择器
            checkAllObj: "#checkAllPlan",//全选 选择器
            clickoutBoxCheck: true,//是否点击组 
            clickoutBoxChecked:null,//点击行选择中后 回调
            checkoutBox: "tr",//组 
           // checkboxCallBack:null,
            checkboxClass: "icheckbox_square-green",//样式
            checkboxMargin: "0 0 0 0",//上右下左
            bodyOverflowHidden: true,//给body加上overflow:hidden 这个主要是chrome浏览器兼容问题，超出窗口范围的表格或列表里面的checkbox控件 ,iframe就会出现滚动条问题'
            firstAutoCheckAll:true//渲染完后是否自动选择或者取消全选框 
        };
        var options = $.extend( defaults,options);
       //  console.log(options)
        return $(this).each(function () {
            //console.log(options.checkboxClass);
            var e=this;
            var $this = $(this);

            //$this.find("input[type='checkbox']").iCheck('destroy');
            //$this.find("input[type='checkbox']").iCheck('update');
            $this.find("input[type='checkbox']").iCheck({ checkboxClass: options.checkboxClass });

            //如果一样让全选框 选中 否则不选中
            if (options.firstAutoCheckAll){
            if ($this.find(options.checkObj).size() == $this.find(options.checkObj).filter(":checked").size() && $this.find(options.checkObj).size()!=0)
                $(options.checkAllObj).iCheck("check");
            else
                $(options.checkAllObj).iCheck("uncheck");
            }

            $(document).on("ifCreated", options.checkObj, function () {

                $(this).parent("div").css("margin", options.checkboxMargin);
            });
            $(document).on("ifCreated", options.checkAllObj, function () {

                $(this).parent("div").css("margin", options.checkboxMargin);
            });
            if (!$this.data("regist")) {//判断是否注册 
                if (options.bodyOverflowHidden) {
                    $("body").css("overflow", "hidden");
                }
                
                $this.data("regist", true);
           
                $(document).on("ifClicked", options.checkAllObj, function () {
                    //console.log(this.checked)
                    //console.log($this.data("regist"))
                   // console.log($this.find(options.checkObj));
                    if (!this.checked) 
                        $this.find(options.checkObj).each(function () {
                            $(this).iCheck('check');
                        });
                    else
                        $this.find(options.checkObj).each(function () {
                            $(this).iCheck('uncheck');
                        });
                        
                });

                ////选中
                $this.on('ifChanged', options.checkObj, function () {
                    //  console.log($this.find(options.checkObj).filter(":checked").size())
                    if ($this.find(options.checkObj).size() == $this.find(options.checkObj).filter(":checked").size())
                        $(options.checkAllObj).iCheck("check");
                    else
                        $(options.checkAllObj).iCheck("uncheck");

                    //if (!options.checkboxCallBack) {
                    //    options.checkboxCallBack.call(e,this);
                    //}
                });
                //选中列表的行的处理
                if (options.clickoutBoxCheck) {
                    $this.on('click', options.checkoutBox, function () {
                      //  console.log($(event.target))
                       // if (!$(event.target).hasClass("checkPlan")) {
                            // console.log($this.find(options.checkoutBox + " " + options.checkObj).filter(":checkbox"))
                            $this.find(options.checkoutBox + " " + options.checkObj).filter(":checkbox").iCheck("uncheck");
                            if ($(this).find(options.checkObj).filter(":checkbox").is(":checked")) {
                                $(this).find(options.checkObj).filter(":checkbox").iCheck("uncheck");
                            }
                            else {
                                $(options.checkAllObj).iCheck("uncheck");
                                $(this).find(options.checkObj).filter(":checkbox").iCheck("check");
                            }
                      //  }

                        $this.find(options.checkoutBox).removeClass('check');
                        $(this).addClass('check');
                    
                        if (options.clickoutBoxChecked) {
                          
                            options.clickoutBoxChecked.call(e,this);
                        }
                    });
                }
              
            }

        });

    };

})(window.jQuery)